// pages/message/message.js
import websocket from '../../utils/websocket';

const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    messageList: [],
    loading: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.initWebSocket();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时重新获取会话列表
    if (this.data.messageList.length === 0) {
      this.getSessions();
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 移除消息处理器
    if (websocket.ws) {
      websocket.onMessage(null); // 清除消息处理器
    }
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  async onPullDownRefresh() {
    await this.getSessions();
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  initWebSocket() {
    // 设置消息处理器
    websocket.onMessage((data) => {
      console.log('消息页面收到消息，完整数据:', data);
      const { type, data: messageData } = data;

      switch (type) {
        case 'sessions':
          console.log('收到会话列表数据:', {
            会话数量: messageData.sessions.length,
            详细会话列表: messageData.sessions.map(session => ({
              会话ID: session.sessionId,
              商品信息: {
                商品ID: session.product.id,
                商品标题: session.product.title,
                商品价格: session.product.price,
                商品状态: session.product.status
              },
              对方信息: {
                用户ID: session.otherUser.id,
                用户名: session.otherUser.name,
                头像: session.otherUser.avatar,
                状态: session.otherUser.status
              },
              最新消息: {
                消息ID: session.lastMessage.id,
                内容: session.lastMessage.content,
                类型: session.lastMessage.type,
                发送时间: session.lastMessage.createdAt,
                是否已读: session.lastMessage.isRead,
                发送者: session.lastMessage.sender.name,
                接收者: session.lastMessage.receiver.name
              },
              未读数: session.unreadCount,
              更新时间: session.updatedAt
            }))
          });
          // 处理会话列表更新
          this.handleSessionsUpdate(messageData.sessions);
          break;
        case 'error':
          console.error('WebSocket错误:', messageData);
          wx.showToast({
            title: messageData.message || '发生错误',
            icon: 'none'
          });
          break;
      }
    });

    // 连接WebSocket
    if (!websocket.isConnected) {
      websocket.connect();
    }
  },

  // 获取会话列表
  async getSessions() {
    if (this.data.loading) return;

    this.setData({ loading: true });
    console.log('开始获取会话列表...');

    try {
      await websocket.send('getSessions', {});
      console.log('已发送获取会话列表请求');
    } catch (error) {
      console.error('获取会话列表失败，错误详情：', error);
      wx.showToast({
        title: '获取会话列表失败',
        icon: 'none'
      });
    } finally {
      this.setData({ loading: false });
    }
  },

  // 处理会话列表更新
  handleSessionsUpdate(sessions) {
    console.log('开始处理会话列表数据，会话数量:', sessions.length);

    const messageList = sessions.map(session => {
      const messageItem = {
        id: session.sessionId,
        title: session.otherUser.name,
        content: session.lastMessage.content,
        time: this.formatTime(session.lastMessage.createdAt),
        avatar: session.otherUser.avatar,
        unread: session.unreadCount > 0,
        unreadCount: session.unreadCount,
        productInfo: session.product,
        otherUser: session.otherUser
      };

      console.log('处理会话项:', {
        会话ID: messageItem.id,
        标题: messageItem.title,
        内容: messageItem.content,
        时间: messageItem.time,
        未读数: messageItem.unreadCount
      });

      return messageItem;
    });

    console.log('会话列表处理完成，准备更新UI，列表长度:', messageList.length);
    this.setData({ messageList });
  },

  // 点击消息项
  onMessageClick(e) {
    const { id } = e.currentTarget.dataset;
    const message = this.data.messageList.find(msg => msg.id === id);

    if (message) {
      console.log('点击消息项，跳转到聊天页面:', message);
      wx.navigateTo({
        url: `/pages/chat/chat?sessionId=${message.id}`,
        fail: (err) => {
          console.error('跳转失败:', err);
          wx.showToast({
            title: '跳转失败',
            icon: 'none'
          });
        }
      });
    }
  },

  // 格式化时间
  formatTime(timestamp) {
    if (!timestamp) return '';
    const date = new Date(timestamp);
    const now = new Date();
    const diff = now - date;

    // 小于1分钟
    if (diff < 60000) {
      return '刚刚';
    }
    // 小于1小时
    if (diff < 3600000) {
      return `${Math.floor(diff / 60000)}分钟前`;
    }
    // 小于24小时
    if (diff < 86400000) {
      return `${Math.floor(diff / 3600000)}小时前`;
    }
    // 小于7天
    if (diff < 604800000) {
      return `${Math.floor(diff / 86400000)}天前`;
    }
    // 其他情况显示具体日期
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    return `${month}-${day}`;
  },
})